完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-13
到 Day 12 為止,我們已經完成了 訓練 → 紀錄 → 分析 的流程,但如果模型只能靜靜躺在 results/
裡,就還不算真正被使用。
推論服務(Inference Service) 是把模型從「研究產物」轉換成「可被系統調用」的關鍵。
今天的目標是用 FastAPI 部署我們訓練好的模型,讓任何人都能透過 API 輸入文字,獲得模型輸出的結果。同時,也會比較其他部署策略(Ollama、vLLM)的特色,作為未來擴展的參考。
輸入:一段文字(如影評)
輸出:分類結果(正面 / 負面)、信心分數、處理延遲、基礎模型名稱
特點:
results/
裡最新或指定的 checkpoint本專案提供輕量級的情感分類推論服務,支援多種預訓練模型:
# 使用最新實驗的模型
make serve
# 或指定特定實驗
make serve exp=default_experiment_20250911_233842
# 檢查服務狀態
make predict-health
# 測試自訂文本
make predict-text text='This movie was great!'
# 使用預設範例
make predict-positive # 測試正面評論
make predict-negative # 測試負面評論
為了避免手動設定模型名稱與標籤數,推論服務現在會 自動讀取實驗配置。
推論 API 的輸出範例如下:
{
"label": 1,
"probability": 0.9983,
"latency_ms": 25.4,
"base_model": "distilbert-base-uncased",
"language": "英文"
}
模型選擇
服務配置
路徑格式
results/{實驗名稱}/
artifacts/final_model/
results/default_experiment_20250911_233842/artifacts/final_model
雖然這一章重點是 FastAPI 部署自己訓練的模型,但還有其他值得關注的策略:
Ollama
vLLM
FastAPI(本專案主線)
Day 13 的核心成果是:我們完成了從 訓練 → 部署 → 推論 的完整流程,讓模型不再只是靜態的檔案,而是即時可用的服務。這一步不僅讓我們可以快速驗證模型,也讓不同的部署策略開始有了清楚的比較基準。
FastAPI 的部署方式為專案提供了最大的靈活度與一致性,同時也為後續的錯誤處理、版本管理與權限控制打下基礎。接下來,平台將正式進入「可用、可維護、可擴展」的階段。
📎 AI 協作記錄:今日開發指令
請幫我建立一個 **推理服務比較環境**,包含:
1. **FastAPI 版本 (MPS 加速)**:
- 建立 `app/inference_api.py`,使用 Hugging Face pipeline + MPS。
- 提供 `/generate` API,輸入 prompt,輸出生成文字。
2. **Ollama 測試**:
- 說明如何啟動 Ollama (`ollama run mistral`)。
- 提供 API 測試指令(curl)。
3. **壓測腳本**:
- 提供 wrk 或 locust 測試 FastAPI (8000) 與 Ollama (11434)。
- 收集延遲、QPS、成功率。
請幫我生成:
- `app/inference_api.py`
- 測試指令(bash)
- README.md 補充 FastAPI vs Ollama 部署與測試說明